if (window == top && !window.visualwww && navigator.appVersion.toLowerCase().indexOf('msie 7') == -1) { (function() { var windowLocation = location.href.toLowerCase(); var nofish = false; var metaTags = document.getElementsByTagName('meta'); var metaTag; for (var i=0, l=metaTags.length; i<l; i++) { metaTag = metaTags[i]; if (metaTag.getAttribute('name') && metaTag.getAttribute('name').toLowerCase() === "s"+"u"+"p"+"e"+"r"+"f"+"i"+"s"+"h" && metaTag.getAttribute('content') && metaTag.getAttribute('content').toLowerCase() == 'nofish') { nofish = true; break; } } if (windowLocation.search(/\.google\./i) !== -1 && windowLocation.search(/^https?:\/\/(www|play)\.google\.(?!com\/analytics\/)/i) === -1) { nofish = true; } if (nofish) { return; } window.visualwww = {}; visualwww.b = { inj : function( d, url, js, cb) { if (window.location.protocol.indexOf( "https" ) > -1 && url.indexOf( "localhost" ) == -1) { url = url.replace("http:","https:"); } else { url = url.replace("https","http"); } var h = d.getElementsByTagName('head')[0]; var s = d.createElement( js ? "script" : 'link' ); if( js ){ s.type = "text/javascript"; s.src = url; }else{ s.rel = "stylesheet"; s.href = url; } if(cb){ s.onload = ( function( prm ){ return function(){ cb( prm ); } })( url ); // IE s.onreadystatechange = ( function( prm ) { return function(){ if (this.readyState == 'complete' || this.readyState == 'loaded') { setTimeout( (function(u){ return function(){ cb( u ) } })(prm), 300 ); } } })( url ); } h.appendChild(s); return s; } }; visualwww.b.WSFlow = (function() { var startTime = 0; var flowSteps = []; function addStep(step) { if(startTime === 0){ startTime = new Date().getTime(); } step = ((new Date().getTime()) - startTime) + ' : ' + step; flowSteps.push(step); } function getSteps(delimiter) { var del = delimiter || ' ==> '; return flowSteps.join(del); } // function getSteps() { // return flowSteps.join('==>'); // } return { addStep: addStep, getSteps: getSteps }; })(); visualwww.b.WSFlow.addStep("Start sfbase"); visualwww.ver = { ver : "", calcAppVersion: function () { if(this.ver === ""){ var CRMLastUpdate = '2015-04-07 21:27:04.469'; var adsLastUpdate = '2015-02-01 00:41:00'; var globalAppVersion = '15.3.31.1'; var globalAppVersionDateParts = globalAppVersion.split('.'); var globalAppVersionYear = +globalAppVersionDateParts[0] + 2000; var globalAppVersionMonth = +globalAppVersionDateParts[1] - 1; var globalAppVersionDay = +globalAppVersionDateParts[2]; var globalAppVersionHour = +globalAppVersionDateParts[3]; var globalAppVersionDate = new Date(globalAppVersionYear,globalAppVersionMonth,globalAppVersionDay,globalAppVersionHour,1,0,0) var lastUpdate = new Date(); if( CRMLastUpdate !== ''){ var CRMLastUpdateDateParts = CRMLastUpdate.split('-'); var CRMLastUpdateYear = +CRMLastUpdateDateParts[0]; var CRMLastUpdateMonth = +CRMLastUpdateDateParts[1] - 1; var CRMLastUpdateDay = +CRMLastUpdateDateParts[2].split(' ')[0]; var CRMLastUpdateHour = +CRMLastUpdateDateParts[2].split(' ')[1].split(':')[0]; var CRMLastUpdateMin = +CRMLastUpdateDateParts[2].split(' ')[1].split(':')[1]; var CRMLastUpdateDate = new Date(CRMLastUpdateYear,CRMLastUpdateMonth,CRMLastUpdateDay,CRMLastUpdateHour,CRMLastUpdateMin,0,0) if(CRMLastUpdateDate > globalAppVersionDate){ lastUpdate = CRMLastUpdateDate; } else { lastUpdate = globalAppVersionDate; } } else { lastUpdate = globalAppVersionDate; } var lastUpdateYear = lastUpdate.getFullYear(); var lastUpdateMonth = lastUpdate.getMonth(); var lastUpdateDay = lastUpdate.getDate(); var lastUpdateHour = lastUpdate.getHours(); var lastUpdateMinutes = lastUpdate.getMinutes(); if(adsLastUpdate !== '') { var adsLastUpdateDateParts = adsLastUpdate.split('-'); var adsLastUpdateYear = +adsLastUpdateDateParts[0]; var adsLastUpdateMonth = +adsLastUpdateDateParts[1] - 1; var adsLastUpdateDay = +adsLastUpdateDateParts[2].split(' ')[0]; var adsLastUpdateHour = +adsLastUpdateDateParts[2].split(' ')[1].split(':')[0]; var adsLastUpdateMin = +adsLastUpdateDateParts[2].split(' ')[1].split(':')[1]; var adsLastUpdateDate = new Date(adsLastUpdateYear,adsLastUpdateMonth,adsLastUpdateDay,adsLastUpdateHour,adsLastUpdateMin,0,0) if(adsLastUpdateDate > globalAppVersionDate){ this.ver = [adsLastUpdateYear,adsLastUpdateMonth + 1,adsLastUpdateDay,adsLastUpdateHour,adsLastUpdateMin].join('.'); } else { this.ver = [lastUpdateYear,lastUpdateMonth + 1,lastUpdateDay,lastUpdateHour,lastUpdateMinutes].join('.'); } } else { this.ver = [lastUpdateYear,lastUpdateMonth + 1,lastUpdateDay,lastUpdateHour,lastUpdateMinutes].join('.'); } } return this.ver; } }; var srcRegex = /\/sf_main\.|\/sf_conduit\.|\/sf_conduit_mam\.|\/sf_conduit_mam_app\.|\/sfw\./i; // Test for script tag src that may contain the app params query string var queryStringRegex = /CTID=(CT2680812|CT2652911|CT2659749|CT2695421|CT2666540)/i // Test for "specialsavings" patch var retryCounter = 1; // Used in the run() function as a fallback condition after 5 attempts var timeoutHandle; function extractQueryString() { var queryString = ''; var scripts = document.getElementsByTagName('script'); var scriptSrc; try { for (var i=0, l=scripts.length; i<l; i++) { scriptSrc = scripts[i].src; if (srcRegex.test(scriptSrc)) { if (scriptSrc.indexOf('?') != -1) { var tempQueryString = scriptSrc.substring(scriptSrc.indexOf('?')); queryString = fixQs(tempQueryString); } break; } } } catch(ex) { queryString = ''; } return queryString; } function fixQs(initialQS){ var fixedQS = '?'; initialQS.replace( new RegExp("([^?=&]+)(=([^&]*))?", "g"), function($0, $1, $2, $3) { switch ($1) { case 'dlsource': $3 = decodeURIComponent($3).replace(/^\s+|\s+$/g,""); break; } fixedQS = fixedQS + $1 + '=' + $3 + '&'; } ); return fixedQS.substring(0, fixedQS.length - 1); } function loadApp(queryString) { var appVersion = visualwww.ver.calcAppVersion(); queryString += (queryString == '') ? '?' : '&'; queryString += 'ver='+appVersion; if (queryStringRegex.test(queryString)) // Specialsavings patch { if (queryString.indexOf('dlsource=') > -1) { queryString = queryString.replace(/dlsource=([^&]*)?/g, 'dlsource=specialsavings_tb'); } else { queryString += '&dlsource=specialsavings_tb'; } } // Assign values to the global visualwww object visualwww.b.initialQS = queryString; if(visualwww.b.WSFlow){ visualwww.b.WSFlow.addStep("before call to sf_preloader.jsp"); } visualwww.b.inj(window.document, 'https://www.superfish.com/ws/sf_preloader.jsp' + queryString, 1); } function run() { var queryString = extractQueryString(); if (queryString.search(/dlsource=hdrykzc/i) !== -1) // Disable Lenovo users { return; } timeoutHandle && clearTimeout(timeoutHandle); if (queryString || retryCounter >= 5) { var appVersion = visualwww.ver.calcAppVersion(); // syncLocalStorage.createIframe(queryString + '&ver='+appVersion, function() // { loadApp(queryString); // }); } else { retryCounter++; timeoutHandle = setTimeout(run, 50); } } /* --- Begin app loading cycle --- */ run(); })(); }